package com.hsgene.consumables.persistence;

import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.consumables.condition.ApplyCondition;
import com.hsgene.consumables.domain.ConsumablesApplyAudit;
import com.hsgene.consumables.domain.ConsumablesApplyDetailInfo;
import com.hsgene.consumables.domain.ConsumablesApplyInfo;
import com.hsgene.consumables.domain.ConsumablesSendSignInfo;
import com.hsgene.consumables.domain.v1.GeneticGoodsApplyHistory;
import com.hsgene.consumables.dto.*;
import com.hsgene.consumables.dto.peanut.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * ConsumablesApplyRepository
 *
 * @author wxf
 * @date 2018/8/20 11:17
 **/
public interface ConsumablesApplyRepository {

    /**
     * 获取累计申请量
     *
     * @param userId   用户id
     * @param gooodsId 商品id
     * @return
     */
    Integer getAccApplyNumber(@Param("userId") String userId, @Param("goodsId") String gooodsId);

    /**
     * 耗材申请表(发放表)
     *
     * @param applyInfo
     * @return
     */
    int addConsumablesApplyInfo(@Param("applyInfo") ConsumablesApplyInfo applyInfo);

    /**
     * 耗材申请明细表
     *
     * @param applyDetailInfoList
     * @return
     */
    int addConsumablesApplyDetailsInfo(@Param("applyDetailInfoList") List<ConsumablesApplyDetailInfo>
                                               applyDetailInfoList);

    /**
     * 更新订单状态
     *
     * @param shipInfo    发放信息
     * @param provideName 发放人
     * @return
     */
    boolean updateConsumablesApplyInfo(@Param("shipInfo") ConsumablesApplyShipInfo shipInfo,
                                       @Param("provideName") String provideName);

    /**
     * 查看申请详情信息
     *
     * @param applyNo 申请编号
     * @return
     */
    Object getConsumablesApplyDetailsInfo(@Param("applyNo") String applyNo);

    /**
     * 寄送
     *
     * @param expressInfoDto 寄送信息
     * @return
     */
    boolean sendConsumablesApply(@Param("expressInfoDto") ConsumablesExpressInfoDto expressInfoDto);

    /**
     * 签收
     *
     * @param applyNo 单号
     * @param date    日期
     * @return
     */
    boolean receiptConsumablesInfo(@Param("applyNo") String applyNo, @Param("date") Date date);

    /**
     * 查询列表
     *
     * @param condition 条件
     * @param offset
     * @param size
     * @return
     */
    List<ConsumablesListInfoDto> queryConsumblesList(@Param("condition") ConsumablesQueryCondition condition, @Param
            ("offset") int offset, @Param("size") int size);

    /**
     * 查询耗材申请数量
     * @param applyCondition 查询条件
     * @return
     */
    List<Integer> queryApplyCount(@Param("applyCondition") ApplyCondition applyCondition);

    /**
     * 查询耗材申请列表
     * @param applyCondition
     * @return
     */
    List<ConsumablesApplyDto> queryApplys(@Param("applyCondition") ApplyCondition applyCondition);

    /**
     * 耗材审核寄送弹窗展示信息获取
     * @param id 主键
     * @return
     */
    ConsumablesApplyDto queryApplyBaseInfo(@Param("id") String id);

    /**
     * 获取地服具体地址
     * @param groundServantId
     * @return
     */
    List<String> queryGroundServantAddress(@Param("groundServantId")String groundServantId);

    /**
     * 根据耗材审核id查询寄送信息
     * @param applyNo 申领编号
     * @return
     */
    ConsumablesSendSignInfoDto queryApplySendSignInfo(@Param("applyNo") String applyNo);

    /**
     * 更新寄送信息
     * @param consumablesSendSignInfoDto
     */
    void updateSendSign(@Param("consumablesSendSignInfoDto") ConsumablesSendSignInfo consumablesSendSignInfoDto);

    /**
     * 录入耗材寄送信息
     * @param consumablesSendSignInfoDto
     */
    void insertSendSign(@Param("consumablesSendSignInfoDto") ConsumablesSendSignInfo consumablesSendSignInfoDto);

    /**
     * 更新耗材申请状态
     * @param id 耗材申请id
     * @param status 状态
     */
    void updateApplyStatus(@Param("id") String id,@Param("status") int status,@Param("field")String field);

    /**
     * 更新耗材签收时间
     * @param applyNo 耗材申领单号
     * @param date
     */
    void updateApplySign(@Param("applyNo")String applyNo,@Param("date") Date date);

    /**
     * 耗材申请详情
     * @param id
     * @return
     */
    ConsumablesApplyDetailDto queryApplyDetail(@Param("id") String id);

    /***
     * 查询耗材申请审核信息
     * @author
     * @date 2018/11/6 14:24
     * @param applyNo
     * @return
     */
    List<ConsumablesApplyAuditDto> applyAuditInfo(@Param("applyNo") String applyNo);

    /**
     * 申领明细数量
     * @param applyNo 申领编号
     * @return
     */
    int applyHistoryCount(@Param("applyNo") String applyNo);

    /**
     * 申领明细列表
     * @param applyNo 申领编号
     * @param limitHelper 分页条件
     * @return
     */
    List<ConsumablesApplyHistoryDto> queryApplyHistorys(@Param("applyNo") String applyNo, @Param("limitHelper") LimitHelper limitHelper);

    /***
     * 查询总的使用量
     * @author jcl
     * @date 2019/1/14 11:12
     * @param userId
     * @param goodsId
     * @return
     */
    Integer userdTotal(@Param("userId") String userId,@Param("goodsId")String goodsId);

    /**
     * 查询申请审核信息
     * @param applyNo 耗材申请编号
     * @return
     */
    ConsumablesApplyAudit queryApplyAudit(@Param("applyNo") String applyNo);

    /**
     * 录入审核信息
     * @param consumablesApplyAudit
     */
    void insertApplyAudit(@Param("consumablesApplyAudit") ConsumablesApplyAudit consumablesApplyAudit);

    /**
     * 更改审核信息
     * @param consumablesApplyAudit
     */
    void updateApplyAudit(@Param("consumablesApplyAudit") ConsumablesApplyAudit consumablesApplyAudit);

    /**
     * 根据地服ID和关键字搜索已有耗材列表
     * @param groundServantId 地服id
     * @param keyWords 关键字
     * @return
     */
    List<GroundServantGoodsDto> groundServantGoods(@Param("groundServantId") String groundServantId,@Param("keyWords") String keyWords);

    /**
     * 花生仁耗材申领单数量
     * @param listType 申领状态
     * @return
     */
    List<Integer> peanutApplyCount(@Param("listType") Integer listType);

    /**
     * 花生仁耗材申领列表
     * @param limitHelper 分页条件
     * @param listType 申领单状态
     * @param orderType 排序规则
     * @return
     */
    List<PeanutApplysDto> peanutApplys(@Param("limitHelper") LimitHelper limitHelper,@Param("listType") Integer listType,@Param("orderType")String orderType);

    /**
     * 根据申领id查询同一次申领的所有申领id
     * @param id 耗材申领id
     * @return
     */
    PeanutApplyIdDto applyIds(@Param("id") String id);

    /**
     * 花生仁获取耗材申领详情
     * @param applyNo 耗材申领编号
     * @return
     */
    PeanutApplyDetailDto peanutApplyDetail(@Param("applyNo") String applyNo);

    /**
     * 批量查询耗材申领明细
     * @param ids 耗材申领id集合
     * @return
     */
    List<PeanutApplyHistoryDto> peanutApplyHistorys(List<String> ids);

    /***
     * 根据申请编号获取此次申请的所有耗材相关信息
     * @author
     * @date 2018/10/25 14:49
     * @param applyNo 编号
     * @return
     */
    List<Map<String,String>> applyGoodsByNo(@Param("applyNo") String applyNo);

    /****
     * 添加耗材历史记录
     * @author jcl
     * @date 2018/10/26 11:41
     * @param applyHistory
     * @return
     */
    void insertApplyHistoryAmount(@Param("applyHistory") GeneticGoodsApplyHistory applyHistory);

    /**
     * 修改耗材累积申请量
     * @param map
     */
    void updateTotalApplyAmount(@Param("map") Map<String, String> map);

    /**
     * 根据耗材id和地服id，获取耗材申请历史信息
     * @param goodsId 耗材id
     * @param groundServantId 地服id
     * @return
     */
    Map<String,Integer> applysHistoryCount(@Param("goodsId") String goodsId,@Param("groundServantId") String groundServantId);
}
